package com.itany.jdbc;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @Author:石小俊
 * @Date:2022/11/14 13:39
 * @Version:1.0-SNAPSHOT
 * @Description:
 */
public class Test12 {

    public static void main(String[] args) throws SQLException {
//        test1();
        test2();
    }

    public static void test1() throws SQLException {
        // 实例化数据库连接池
        BasicDataSource ds = new BasicDataSource();
        // 设置连接池的基本属性
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://127.0.0.1:3306/jdbc?useUnicode=true&characterEncoding=utf-8");
        ds.setUsername("root");
        ds.setPassword("");

        // 设置连接池中初始化的连接个数
        ds.setInitialSize(1);
        // 设置最大活跃连接数,表示连接池中最多有多少个连接
        ds.setMaxActive(1);

        // 设置最长等待时间
        // 当连接池中所有连接均被占用,此时有人需要连接
        // 其必须等待其他连接还回来
        // 可以设置其等待的时间,如果超出时间尚未有连接还回来,则报错
        // 单位:毫秒
        ds.setMaxWait(3000);
        // 设置最大空闲连接数
        // 保证连接池中最大有多少个空闲的连接等待调用
        // 不能超出最大连接数
        ds.setMaxIdle(1);
        // 设置最小空闲连接数
        // 保证连接池中至少有多少个空闲的连接等待调用
        ds.setMinIdle(1);

        // 获取连接
        Connection conn = ds.getConnection();
        System.out.println(conn);
        // 将连接还给连接池
        // conn.close();
        Connection conn2 = ds.getConnection();
        System.out.println(conn2);
    }

    public static void test2(){
        Properties p = new Properties();
        try {
            p.load(Test12.class.getClassLoader().getResourceAsStream("dataSource.properties"));
            System.out.println(p);
            DataSource ds = BasicDataSourceFactory.createDataSource(p);
            Connection conn = ds.getConnection();
            System.out.println(conn);
//            Connection conn2 = ds.getConnection();
//            System.out.println(conn2);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
